#include "UserDao.h"
#include <sqlite3.h>
#include <stdio.h>

void addUser(User* user)
{
    // 定义一个sqlite3对象
    sqlite3* db = NULL;

    // 打开数据库
    int ret = sqlite3_open("/home/guoxi/ronghua_ads/test.db",&db);
    if (ret!=0)
    {
        perror("open db failed");
        return;
    }

    // 执行sql语句
    char sql[256];
    sprintf(sql,"insert into t_user(id,name) values(%d,'%s')",user->id,user->name);
    char* errMsg = NULL;
    ret = sqlite3_exec(db,sql,NULL,NULL,&errMsg);
    if (errMsg != NULL)
    {
        perror("insert user failed");
    }else{
        printf("insert user success\n");
    }
    
    // 关闭数据库
    sqlite3_close(db);
}

void getOne(int id){
    // 定义一个sqlite3对象
    sqlite3* db = NULL;

    // 打开数据库
    int ret = sqlite3_open("/home/guoxi/ronghua_ads/test.db",&db);
    if (ret!=0)
    {
        perror("open db failed");
        return;
    }

    // 执行sql语句
    // 查询单个
    char sql[256];
    sprintf(sql,"select * from t_user where id = %d;",id);
    char* errMsg = NULL;
    char** pResult;
    int nRow,nCol;
    ret = sqlite3_get_table(db,sql,&pResult,&nRow,&nCol,&errMsg);
    if (ret != SQLITE_OK)
    {
        perror("select user failed");
    }else{
        // dbResult 第一行数据是字段名称，从 nColumn 索引开始才是真正的数据
        int index = nCol;
        printf("查询到id=%d的用户\n",id);
        
        int i, j;
        for(i = 0; i <= nRow; i++) {
            for(j = 0; j < nCol; j++) {
                int temp=i * nCol + j;
                printf("%s\t", pResult[temp]);
            }
            printf("\n");
        }
    }

    // 关闭数据库
    sqlite3_close(db);
}

void getAll(){
    // 定义一个sqlite3对象
    sqlite3* db = NULL;

    // 打开数据库
    int ret = sqlite3_open("/home/guoxi/ronghua_ads/test.db",&db);
    if (ret!=0)
    {
        perror("open db failed");
        return;
    }

    // 执行sql语句
    // 查询单个
    char sql[256];
    sprintf(sql,"select * from t_user;");
    char* errMsg = NULL;
    char** pResult;
    int nRow,nCol;
    ret = sqlite3_get_table(db,sql,&pResult,&nRow,&nCol,&errMsg);
    if (ret != SQLITE_OK)
    {
        perror("select user failed");
    }else{
        // dbResult 第一行数据是字段名称，从 nColumn 索引开始才是真正的数据
        int index = nCol;

        // 方法1
        printf("查询到%d条数据\n",nRow);
        for(  int i = 0; i < nRow ; i++ )
        {
            // printf("第 %d 条记录\n", i+1 );
            // for( int j = 0 ; j < nCol; j++ )
            // {
            //     printf( "字段名:%s  >  字段值:%s\n",  pResult[j], pResult[index] );    
            //     ++index;
            //     // dbResult 的字段值是连续的，从第0索引到第 nColumn - 1索引都是字段名称，
            //     // 从第 nColumn 索引开始，后面都是字段值
            // }
        }

        // 方法2
        int i, j;
        for(i = 0; i <= nRow; i++) {
            for(j = 0; j < nCol; j++) {
                int temp=i * nCol + j;
                printf("%s\t", pResult[temp]);
            }
            printf("\n");
        }
    }

    // 关闭数据库
    sqlite3_close(db);
}

void deleteUser(int id){
    // 定义一个sqlite3对象
    sqlite3* db = NULL;

    // 打开数据库
    int ret = sqlite3_open("/home/guoxi/ronghua_ads/test.db",&db);
    if (ret!=0)
    {
        perror("open db failed");
        return;
    }

    char sql[256];
    sprintf(sql,"delete from t_user where id = %d;",id);
    char* errMsg = NULL;
    ret = sqlite3_exec(db,sql,NULL,NULL,&errMsg);
    if (ret != SQLITE_OK)
    {
        perror("delete user failed");
    }else{
        printf("delete user success\n");
    }
    
    sqlite3_close(db);
}

void updateUser(int id, char* name){
    // 定义一个sqlite3对象
    sqlite3* db = NULL;

    // 打开数据库
    int ret = sqlite3_open("/home/guoxi/ronghua_ads/test.db",&db);
    if (ret!=0)
    {
        perror("open db failed");
        return;
    }

    char sql[256];
    sprintf(sql,"update t_user set id=%d,name='%s' where id=%d;",id,name,id);
    char* errMsg = NULL;
    ret = sqlite3_exec(db,sql,NULL,NULL,&errMsg);
    if (ret != SQLITE_OK)
    {
        perror("update user failed");
    }else{
        printf("update user success\n");
    }
    sqlite3_close(db);
}